Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.04.2019, 12:12
Интересующийся
Отправить личное сообщение для Student_vrn Посмотреть профиль Найти все сообщения от Student_vrn
 
Регистрация: 25.04.2019
Сообщений: 20

Трудности с получением JSON-погоды через API с погодного сервера
Здравствуйте, уважаемые форумчане!

Несколько дней бьюсь с задачей. По отдельности всё понятно и даже работает, но системно не получается.
Суть: нужно на JavaScript через API функции связаться с погодным сервером и вывести данные на своей странице. Вроде бы всё просто.
1) зарегистрировался на DarkSky, получил бесплатный API-ключ. Разобрался с форматом GET-запроса. Пример:
https://api.darksky.net/forecast/eea...ng=ru&units=si

2) через браузерную строку запроса, вручную погодный сервер вполне корректно выдаёт прогноз погоды в формате JSON

{"latitude":51.6606,"longitude":39.2006,"timezone" :"Europe/Moscow","currently":{"time":1556180139,"summary":" Ясно","icon":"clear-day","precipIntensity":0,"precipProbability":0,"te mperature":23.98,"apparentTemperature":23.98,"dewP oint":2.59,"humidity":0.25,"pressure":1025.31,"win dSpeed":3.2,"windGust":4.36,"windBearing":316,"clo udCover":0,"uvIndex":6,"visibility":10.38,"ozone": 331.53},"flags":{"sources":["cmc","gfs","icon","isd","madis"],"nearest-station":4.525,"units":"si"},"offset":3}

3) посредством стороннего JSON Parser'а (http://jsonparseronline.com/) получается легко декодировать представленный ассоциативный массив
4) пытался несколько дней вогнать все эти наработки в JAva Script код и толком ничего не выходило

Запрос делаю ассиметричным через XMLHttpRequest.
В статусе ответа всегда возвращается ноль.
Текст запроса (строка с адресом и параметрами) вроде верен.
Соответственно, раз 0, то не возвращается текст ответа (undefined)

Помогите пожалуйста разобраться, свести всё в цельное рабочее состояние.
Я уж много вспомогательного материала перекроил, но ошибку, недочёт найти пока самостоятельно не смог.
Буду рад вашей помощи...
(извините, если правильно оформил запрос-подсвеченный синтаксис и т.д.)


<script>
window.alert("Тест работоспособности");


var xhr = new XMLHttpRequest();

xhr.open("GET","https://api.darksky.net/forecast/eeaf063f48cd92e5300e9028ce268e12/51.6606,39.2006?exclude=minutely,alerts,hourly,dai ly&flags&lang=ru&units=si", true);
xhr.send(null);

var status = xhr.status;
alert(xhr.status);

if(status==200)
document.write("Текст ответа: " + xhr.responseText)
else if(status==404)
document.write("Ресурс не найден")
else
document.write(request.statusText)


//window.alert("Статус: "+xhr.statusText);//нашёл что-то

//window.alert(xhr.responseText);//нашёл что-то

//var json = JSON.parse(xhr.responseText);
window.alert("Тест2");
//var data = json[Object.keys(json)[0]];
//window.alert(data);


window.alert("Тест3");
alert(document.location);

document.write(txt);
window.alert(getAllResponseHeaders());

</script>
Ответить с цитированием
  #2 (permalink)  
Старый 25.04.2019, 13:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,149

DarkSky API получение погоды по координатам
Student_vrn,
смотреть через свой сервер.
<!DOCTYPE html>

<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">

</head>

<body>
<div id="show"></div>
<script> (async () => {
  const url = "https://api.darksky.net/forecast/eeaf063f48cd92e5300e9028ce268e12/51.6606,39.2006?exclude=minutely,alerts,hourly,dai ly&flags&lang=ru&units=si";
  const {currently} = await fetch(url).then(response => response.json(), () => ({}));
  const {summary, temperature, windSpeed} = currently;
  const str = `${summary}, температура: ${temperature} °C, скорость ветра: ${windSpeed} м/c`;
  show.innerHTML = str;
 })()
</script>
</body>
</html>

Последний раз редактировалось рони, 25.04.2019 в 13:37.
Ответить с цитированием
  #3 (permalink)  
Старый 25.04.2019, 13:47
Интересующийся
Отправить личное сообщение для Student_vrn Посмотреть профиль Найти все сообщения от Student_vrn
 
Регистрация: 25.04.2019
Сообщений: 20

Рони, благодарю за ответ...
Попробовал сохранить текст в html файле
В браузере он ничего не показал

Что значит, "смотреть через свой сервер"?
нужно зарегистрировать свой хостинг и только там всё заработает?
На локальной странице, в браузере не получится?
В каком, например, сейчас открыт этот форум.

Текст скрипта внимательно по изучаю сейчас.
Ответить с цитированием
  #4 (permalink)  
Старый 25.04.2019, 14:27
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,149

Student_vrn,
политика безопасности CORS, точнее могут подсказать специалисты по этому вопросу.
Ответить с цитированием
  #5 (permalink)  
Старый 25.04.2019, 14:37
Интересующийся
Отправить личное сообщение для Student_vrn Посмотреть профиль Найти все сообщения от Student_vrn
 
Регистрация: 25.04.2019
Сообщений: 20

Рони

"Student_vrn,
политика безопасности CORS, точнее могут подсказать специалисты по этому вопросу."

Я попробовал параллельно беседе зарегистрироваться на каком-либо бесплатно-тестовом хостинге.
Пока на таком: https://my.ihc.ru/
Но он не совсем бесплатен.

Есть ли аналоги, где можно быстро залить этот скрипт и протестировать его?
Что-то более простое и не требующего долгой настройки?
Хочется увидеть результат и разбираться в коде, варьируя параметры.

Например, я понял, что XMLHttpRequest далеко не самая подходящая процедура для реализации данной погодной API-задачи.

Есть идеи с тестовым хостингом?
(Очень давно у меня был на Agava)
Ответить с цитированием
  #6 (permalink)  
Старый 25.04.2019, 14:45
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

если есть установленный php и он добавлен в environment classpath (т.е. в командной строке проходит вызов php)

тогда можно запустить локальный сервер:

$ cd <перейти в папку с файлом index.html в котором нужный скрипт>
$ php -S localhost:3000 -t .

и в браузере открывать http://localhost:3000

если надо расшарить кому-то на посмотреть, если провайдер выделил статический ip, можно на роутере сделать маршрутизацию )...
Ответить с цитированием
  #7 (permalink)  
Старый 25.04.2019, 14:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,149

Сообщение от Student_vrn
Есть ли аналоги, где можно быстро залить этот скрипт и протестировать его?
ждите специалистов,возможно они подскажут песочницу, или код, я слабо владею данной темой, но код выше рабочий.
Ответить с цитированием
  #8 (permalink)  
Старый 25.04.2019, 14:55
Интересующийся
Отправить личное сообщение для Student_vrn Посмотреть профиль Найти все сообщения от Student_vrn
 
Регистрация: 25.04.2019
Сообщений: 20

SuperZen,
Приветствую!
Попробую разобраться
Зарегистрировался ещё и на https://www.wix.com
Он бесплатен, не требует всех циферок с бансковской карты
Но беда в другом-он слишком умный, т.е. сразу слишком CMS-овский стиль
А мне всего-то надобно залить файлик на сервер
Просто upload.

Так что сегодня День Регистраций, день всплывающих подзадач.
Не такая простая тестовая задача.
Сам возился-полбеды, ещё и решения ошибочные
и множество скрытых течений.

Попробую, пожалуй, ещё хостингов...
Если есть подходящие под условия задачи-буду рад их опробовать

(Пока даже не могу посмотреть результаты работы скрипта от Рони)
Ответить с цитированием
  #9 (permalink)  
Старый 25.04.2019, 15:00
Интересующийся
Отправить личное сообщение для Student_vrn Посмотреть профиль Найти все сообщения от Student_vrn
 
Регистрация: 25.04.2019
Сообщений: 20

рони,
Благодарю! Попробую разобраться с каждой командой.
Когда помогал с Delphi, иногда тоже было проще заново написать, чем чинить и оптимизировать чужой полурабочий код.
Пока, конечно, синтаксис не очевидно понятный, но код короткий, всё можно разобрать по полочкам.
Опробую, может, ещё вопросов озвучу.
Пока вот хостингом займусь параллельно дальше...
Спасибо Вам за помощь!
Ответить с цитированием
  #10 (permalink)  
Старый 25.04.2019, 15:24
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от рони
политика безопасности CORS
Если API для клиента, то после авторизации разрешение должно быть дано.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JSON и API ВКонтакте lexon777 AJAX и COMET 1 21.11.2014 10:07
Проверка статуса авторизации через open api на сайте (vk.com api) mecer Общие вопросы Javascript 4 06.05.2014 08:31
Google Chart - не получается построить график из данных приходящих через json FRIE Общие вопросы Javascript 7 18.04.2014 19:07
Проблема с json в ответе от сервера madkinadm ExtJS 3 16.05.2012 16:09
Очень нужно.. Отправка HTML куски в JSON от сервера используя Ajax bivnikus jQuery 8 26.10.2010 23:54